package main

import (
	"fmt"
	"sort"
	"strings"
)

func main() {
	str := []string{"eat", "tea", "tan", "ate", "nat", "bat"}
	result := groupAnagrams(str)
	fmt.Println(result)
}

//49. 字母异位词分组
//给你一个字符串数组，请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
//
//字母异位词 是由重新排列源单词的所有字母得到的一个新单词。

//1.
//输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
//输出: [["bat"],["nat","tan"],["ate","eat","tea"]]

// 2.
//输入: strs = [""]
//输出: [[""]]

// 3.
// 输入: strs = ["a"]
// 输出: [["a"]]
func groupAnagrams(strs []string) [][]string {

	// 1. 对 strs 字符排序后 进行分组
	// 2. 获取对应的index 组成返回数组

	sortedStr := make([]string, len(strs))
	// 字符排序
	for idx, str := range strs {
		chars := strings.Split(str, "")
		sort.Strings(chars)
		sortedStr[idx] = strings.Join(chars, "")
	}
	fmt.Println("sortedStr", sortedStr)
	// 排序后分组
	strMap := make(map[string][]int)
	for idx, str := range sortedStr {
		strMap[str] = append(strMap[str], idx)
	}
	// 分组后的数据
	fmt.Println("strMap", strMap)
	// 分别取数据
	result := make([][]string, 0)

	for _, item := range strMap {
		tmp := make([]string, len(item))
		for i, idx := range item {
			tmp[i] = strs[idx]
		}
		result = append(result, tmp)
	}

	return result
}
